package com.example.rpc_core.serializer;

import com.example.rpc_core.spi.SpiLoader;

/**
 * 序列化器工厂（用于获取序列化器对象）
 */
public class SerializerFactory {

    static {
        SpiLoader.load(Serializer.class);
    }

    /**
     * 默认序列化器的 volatile 变量，以支持双重检查锁定
     */
    private static volatile Serializer defaultSerializer;

    /**
     * 获取默认序列化器的实例
     *
     * @return 返回默认序列化器的单例实例
     */
    public static Serializer getDefaultInstance() {
        if (defaultSerializer == null) {
            synchronized (SerializerFactory.class) {
                if (defaultSerializer == null) {
                    defaultSerializer = new JdkSerializer();
                }
            }
        }
        return defaultSerializer;
    }

    /**
     * 获取实例
     *
     * @param key 根据提供的 key 获取对应的序列化器
     * @return 返回序列化器实例
     */
    public static Serializer getInstance(String key) {
        Serializer serializer = SpiLoader.getInstance(Serializer.class, key);
        if (serializer == null) {
            return getDefaultInstance();
        }
        return serializer;
    }
}
